/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package redinftel.formularios;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import redinftel.entidades.Amistad;
import redinftel.entidades.Usuario;
import redinftel.sesiones.AmistadFacadeRemote;
import redinftel.sesiones.PerfilFacadeRemote;
import redinftel.sesiones.UsuarioFacadeRemote;

/**
 *Clase que soliciata la amistad de los amigos
 * @author Six Degrees Team
 */
@ManagedBean
@SessionScoped
public class SolicitarAmistadBean implements Serializable {

    @EJB
    private UsuarioFacadeRemote usuarioFacade;

    public void setAmistadFacade(AmistadFacadeRemote amistadFacade) {
        this.amistadFacade = amistadFacade;
    }

    public void setUsuarioFacade(UsuarioFacadeRemote usuarioFacade) {
        this.usuarioFacade = usuarioFacade;
    }
    @EJB
    private AmistadFacadeRemote amistadFacade;
    private static final String USUARIO = "usuario";
    private String idAmigo;

    public String getIdAmigo() {
        return idAmigo;
    }

    public void setIdAmigo(String idAmigo) {
        this.idAmigo = idAmigo;
    }

    /** Creates a new instance of SolicitarAmistadBean */
    public SolicitarAmistadBean() {
        ChangeLocaleBean.cambiar();
    }

    public SolicitarAmistadBean(boolean movil) {
    }

    public String solicitar() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        idAmigo = (String) con.getExternalContext().getSessionMap().get("idAmigo");
        Usuario yo = new Usuario((Usuario) session.getAttribute(USUARIO));

        return solicitar(idAmigo, yo);

    }

    public String solicitar(String idAmigo, Usuario yo) {
        Usuario nuevo = usuarioFacade.find(new BigDecimal(idAmigo));

        Amistad amistad = new Amistad();
        BigDecimal id = new BigDecimal(1);
        List<BigDecimal> lista = amistadFacade.findPK();
        if (lista.get(0) != null) {
            id = id.add(lista.get(0));
        }
        amistad.setIdAmistad(id);
        amistad.setIdAmigo1(yo);
        amistad.setIdAmigo2(nuevo);
        amistad.setEstado("PENDIENTE");

        amistadFacade.create(amistad);
        //actualizarUsuario();
        return "perfil";
    }

    /**
     * metodo que permite borrar la amistad del usuario
     * @return
     */
    public String borrar() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario) session.getAttribute(USUARIO));
        idAmigo = (String) con.getExternalContext().getSessionMap().get("idAmigo");

        return borrar(idAmigo, yo);
    }

    public String borrar(String idAmigo, Usuario yo) {
        Usuario amigo = usuarioFacade.find(new BigDecimal(idAmigo));

        Amistad amistad1 = amistadFacade.findByUsuarios(yo, amigo);
        if (amistad1 != null) {
            amistadFacade.remove(amistad1);
        }

        Amistad amistad2 = amistadFacade.findByUsuarios(amigo, yo);
        if (amistad2 != null) {
            amistadFacade.remove(amistad2);
        }
        //actualizarUsuario();
        return "perfil";
    }

    /**
     * metodo para aceptar la amistad del usuario
     * en el caso de acceptar la amistad correctamente se redirige a la pagina perfil
     * @return
     */
    public String aceptarAmistad() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario) session.getAttribute(USUARIO));
        idAmigo = (String) con.getExternalContext().getSessionMap().get("idAmigo");

        return aceptarAmistad(idAmigo, yo);
    }

    public String aceptarAmistad(String idAmigo, Usuario yo) {
        Usuario amigo = usuarioFacade.find(new BigDecimal(idAmigo));

        Amistad amistad = amistadFacade.findByUsuarios(amigo, yo);
        if (amistad != null) {
            amistad.setEstado("CONFIRMADA");
            amistadFacade.edit(amistad);
        }
        //actualizarUsuario();
        return "perfil";
    }

    public String ignorarAmistad() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario) session.getAttribute(USUARIO));
        idAmigo = (String) con.getExternalContext().getSessionMap().get("idAmigo");

        return ignorarAmistad(idAmigo, yo);
    }

    public String ignorarAmistad(String idAmigo, Usuario yo) {
        Usuario amigo = usuarioFacade.find(new BigDecimal(idAmigo));

        Amistad amistad = amistadFacade.findByUsuarios(amigo, yo);
        if (amistad != null) {
            amistadFacade.remove(amistad);
        }
        //actualizarUsuario();
        return "perfil";
    }

    /**
     * metodo que actualiza el usuario
     */
    private void actualizarUsuario() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario) session.getAttribute(USUARIO));
        BigDecimal nuevoYo = yo.getIdUsuario();
        yo = usuarioFacade.find(nuevoYo);
        session.setAttribute(USUARIO, yo);
    }
}
